/**
题目链接https://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1?tpId=61&tqId=29515&tPage=1&ru=/kaoyan/retest/1002&qru=/ta/pku-kaoyan/question-ranking
这是手动递归进行全排列的代码
其核心在于递归+循环

循环：
    swap变换头部排列
    递归进行后续序列排列
    sap还原
结果放在数组中，按照题目要求排序后输出
**/
#include <iostream>
#include<algorithm>
using namespace std;
string res[1000];
int index=0;
bool com(string x, string y)
{
    return x<y;
}
void pailie(string &str, int s, int t)
{
    if(s==t)
    {
        // cout<<str<<endl;
        res[index++]=str;
        return;
    }
    /**全排列的核心代码**/
    for(int i=s;i<=t;++i)
    {
        swap(str[s], str[i]);
        pailie(str,s+1,t);
        swap(str[s],str[i]);
    }
}
int main() {
    for(int i =0;i<36;++i)
    {
        res[i]="zzzzz";
    }
        string x ="";
        cin>>x;
        // sort(&x[0],&x[x.length()]);
        pailie(x,0,x.length()-1);
        sort(res,&res[index],com);
        for(int i=0;i<index;++i)
        {
            cout<<res[i]<<endl;
        }
    }
 
// 64 位输出请用 printf("%lld")